热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

词干|词形_:支持多种语言

篇首语:本文由编程笔记#小编为大家整理,主要介绍了:支持多种语言相关的知识,希望对你有一定的参考价值。  🔎大

篇首语:本文由编程笔记#小编为大家整理,主要介绍了:支持多种语言相关的知识,希望对你有一定的参考价值。




  🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎


📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃


🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​


📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】



 🖍foreword


✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。


如果你对这个系列感兴趣的话,可以关注订阅哟👋


文章目录



语言类型学


场景:学术论文分类


不同语言的文本处理


复合词


形态复杂性


迁移学习和多语言深度学习


跨语言搜索


清单


结论




在构建 NLP 系统时,您应该回答的第一件事是您将支持哪种或多种语言。这会影响从数据存储到建模再到用户界面的方方面面。在本章中,我们将讨论在生产多语言 NLP 系统时要考虑的事项。

在本章的最后,我们将有一份关于您的项目的问题清单供您提问。



语言类型学

当支持多种语言时,管理复杂性的一种方法是确定预期语言之间的共性。例如,如果您只处理西欧语言,您知道您只需要考虑拉丁字母及其扩展。此外,您知道所有语言都是融合语言,因此词干化或词形还原将起作用。他们也有类似的语法性别系统:男性、女性,也许还有无生命的中性。


让我们看一个假设的场景。




场景:学术论文分类

在这种情况下,您的输入将是文本文档、PDF 文档或文本文档的扫描件。输出应该是带有文本、标题和标签的 JSON 文档。您将接受作为输入的语言是英语、法语、德语和俄语。您已经标记了数据,但它仅来自最近五年的文章。这是出版商开始要求在提交期间标记文章的时候。最初的分类可以是部门级别的——例如,数学、生物学或物理学。但是,我们需要有一个支持子学科的计划。


首先,我们应该考虑不同的输入格式。我们需要有用于将图像和 PDF 文档转换为文本的 OCR 模型。我们在第 16 章看到我们可以为此使用 Tesseract 等工具。如果找不到满意的模型,我们可以使用文本文件创建训练数据集。一些扫描的文档会有问题。例如,文档可能没有很好地与扫描床对齐,因此文本会倾斜。该文件可能已经过时并且文本已被侵蚀。我们的模型需要适应这一点。因此,我们需要找到某种方法来生成腐蚀和倾斜的文本以支持扫描的文档。我们可以转录一些文件,但这是非常耗费人力的。您尝试通过将转录过程分成几部分来简化转录过程。转录的另一个复杂之处是,如果您使用不懂语言的转录员,他们将更容易出错。


其次,我们要考虑分类任务。对于初始模型,我们可能会使用词汇特征和简单的线性分类器。仅使用关键字在部门级别分离论文是非常可行的。您可以使用专家来生成这些关键字,也可以从词汇分析中找到它们。您仍然需要与精通这些语言的领域专家一起查看关键字。将来,简单的词汇特征将有助于分离子学科,尤其是可能没有很多独特关键字的利基子学科。在这种情况下,我们可能希望转向更复杂的模型。首先,我们可以从具有更复杂模型的词袋开始,或者直接使用 RNN。无论哪种方式,我们都必须构建我们的代码,以便我们可以支持不同的预处理和建模框架。




不同语言的文本处理

在我们讨论项目中的模型构建之前,我们需要确定我们将如何处理文本。我们已经在第2章和第5章中讨论了标记化的一些常见注意事项。大多数书写系统使用空格作为单词分隔符。有些使用其他符号,有些根本不分隔单词。另一个考虑因素是词复合。



复合词


词复合是我们将两个词组合成一个词。例如,“月光”是两个词的组合。在某些语言中,例如德语,这更为常见。事实上,在德语中分词器是一种常见的德语文本处理技术,这在德语中已经很常见了。考虑“Fixpunktgruppe”(“不动点群”)这个词,它是一种特殊代数结构的数学术语。如果我们想找到文档中提到的所有组结构,我们需要将“gruppe”分开。这在具有更多生产后缀的语言中可能很有用。


在英语中,借词与添加前缀或后缀来创建新词一样常见。例如,我们使用“拖拉机”这个词来表示用于拉动的机器——“拖拉机”就是“拉动机”的拉丁词。在其他一些语言中,借用不太常见,例如希腊语、冰岛语和普通话。在这些语言中,我们可能需要考虑将这些词拆分为它们的组成词素。这对于复合词可能不会在所有上下文中复合的语言尤其重要。这些可分词类似于英语中的一些短语动词。短语动词是像“wake up”这样的动词。“向上”助词可以与动词分开,也可以不分开。



I woke up the dog.
I woke the dog up.



但是,有些对象需要分离。



*I woke up her.
I woke her up.



德语翻译“aufstehen”在有限形式中会丢失前缀。



zu aufstehen den Hund ["to wake the dog up"]
Ich stand den Hund auf ["I woke the dog up"]



因为这些派生词通常具有与它们的基础非常不同的含义,我们可能不需要处理它们。在文档级别的工作(例如文档分类)中,这些词不太可能影响模型。您更有可能需要在基于搜索的应用程序中处理此问题。我建议不要在你的第一次迭代中处理这个问题,并监视使用情况,看看是否经常搜索复合词。




形态复杂性


在第 2 章中,我们讨论了语言将语素组合成单词的不同方式。分析语言,如普通话,倾向于使用助词来表达过去时之类的东西。同时,合成(或粘着性)语言,如土耳其语,具有用于表达名词在句子中的作用、时态、介词等的词缀系统。介于这两者之间的是融合语言,比如西班牙语,它没有合成语言那么多可能的词形,但比分析语言多。对于这些不同类型的形态,在考虑词干化与词形还原时需要权衡取舍。


可能的词形式越多,词形还原需要的内存就越多。此外,一些融合语言比其他语言更规则。语言越不规则,词干算法就越困难。例如,芬兰语名词最多可以有 30 种不同的形式。这意味着每个动词需要有 30 个条目。芬兰动词要复杂得多。这意味着,如果你有一个 100 万字的词汇表,你将需要远远超过 3000 万个词条。


分析语言可以使用词干提取或词形还原,甚至都不使用。普通话可能不需要这样的处理。英语是一种从融合型向分析型过渡的语言,可以使用其中任何一种。很少有足够的形式可以使词形还原是可行的,并且词干提取也不是太困难。让我们看一下英语中的规则动词(也称为弱动词)。动词“call”有“call”、“calling”、“calling”和“calls”的形式。名词在英语中更简单——只有两种形式(单数和复数)。确定名词和规则动词形式的规则也很简单,可以构建一个lemmatizerfor。


像芬兰语这样的合成语言通常非常规则,因此词干提取算法很简单。对于融合语言,您可能会使用组合方法。不规则形式在最常用的词中更为常见。因此,您可以对最常见的单词使用词形还原,并使用词干作为后备。





迁移学习和多语言深度学习

嵌入和迁移学习背后的想法之一是神经网络正在学习更高层次的数据中的特征。这些特征可用于获取在一个数据集上训练的模型或模型的一部分,并将其完全用于不同的数据集或不同的问题。但是,我们必须注意数据有多么不同。如果 Twitter 上的英语和医疗记录中的英语之间的差异足以降低可移植性,那么想象一下英语和另一种语言之间的翻译损失了多少。话虽如此,如果您希望构建一个比随机起点更好的模型,您应该尝试可迁移性。这对某些问题比对其他问题更有意义。例如,在我们之前的场景中,学术文档的分类将取决于在我们所有语言中可能具有相似分布的技术术语。这意味着可转移性可能会有所帮助——当然值得尝试。另一方面,如果我们正在构建一个处理来自不同国家的医疗记录的模型,那么跨语言的可迁移性可能就不那么有用了。不仅根本现象不同(不同地方的常见疾病不同),而且对文件的监管要求也不同。因此,这些文件不仅在语言上有所不同,而且在内容和目的上也有所不同。


词嵌入是一种足够通用的技术,有希望实现可迁移性。这仍然是一个研究课题。这个想法是,虽然相同词的词频可能不同,但概念的分布更加普遍。如果是这样,也许我们可以学习从一种语言的向量空间到另一种语言的转换,以保留语义内容之间的关系。


一种方法是学习基于参考翻译的转换。假设我们有两种语言,L1 和 L2。我们从 L1 中获取一个单词列表,以及它们在 L2 中的翻译。这些参考词中的每一个都将映射到 L2 向量空间中的一个点。假设 L1 是拉丁语,L2 是英语。单词“nauta”w在拉丁向量空间中具有向量,v在变换后在英语向量空间中。英语等价的“sailor”有向量uu我们可以通过查看和之间的欧几里得距离来定义该词的转换误差v。使这种差异最小化的转换应该可以很好地工作。问题在于不同的文化可以使用等价的话很不一样。此外,多义词因语言而异,这种方法仅适用于静态嵌入。


这是一个活跃的研究领域,并且会有新的发展。这些技术的希望之一是,它将让我们将其中一些高级技术用于没有构建深度学习模型所需的庞大语料库的语言。




跨语言搜索

如果您正在构建跨语言的搜索解决方案,您通常按语言分隔文档并让用户在搜索时选择一种语言。建立多语言索引是可能的,但可能很困难。有多种方法,但最终您需要一些通用的方法来表示语料库中的单词或概念。以下是一些可能的方法。


您可以使用机器翻译将所有内容翻译成单一语言。在我们的场景中,我们可以将所有文档翻译成英文。这样做的好处是您可以查看这些翻译的质量。缺点是非英文文档的搜索质量会受到影响。


另一方面,如果您可以有效地为翻译模型提供服务,您可以在查询时将其翻译成所有可用的语言。这具有不偏向于一种特定语言的好处。缺点是您需要找到一种方法从这些指数中得出一个共同的分数。另一个复杂因素是自动机器翻译是用完整的文本而不是查询构建的。因此,查询可能会被误译,尤其是当它是一个具有多种含义的词时。


如果不能选择自动机器翻译,您还可以考虑使用词嵌入。这将需要前面谈到的转换。这本质上是在构建一个没有序列预测的翻译模型。




清单

考虑有关您的项目的以下问题:


  • 我需要支持哪些语言?
  • 我需要支持哪些书写系统?
  • 我需要支持哪些 Unicode 块?
  • 我有可以咨询的语言专家吗?
  • 文本处理
    • 我需要支持哪些语言类型?
    • 我是否有必要的参考数据(引理、词干算法)来支持我的语言?
  • 多语言分类
    • 我需要多语言模型,还是每种语言都需要一个模型?
    • 不同语言的标签是相同的,还是只是相似的?
    • 我有用于标记数据的标记器吗?
  • 多语言深度学习
    • 我使用的语言有何不同?
    • 我工作的文化有多大不同?
  • 跨语言搜索
    • 用户是否需要通过单个查询进行跨语言搜索?
    • 我可以使用自动机器翻译模型吗?



结论

处理多语言应用程序可能很复杂,但它也提供了巨大的机会。没有多少 NLP 应用程序是多语言的。也没有多少人有创建此类应用程序的经验。


多语言应用程序如此困难的原因之一是标记的多语言数据的可用性很差。这意味着多语言 NLP 项目通常需要您收集标记数据。我们将在第 18 章讨论人类标签。


推荐阅读
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 中文分词_中文分词技术小结几大分词引擎的介绍与比较
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了中文分词技术小结几大分词引擎的介绍与比较相关的知识,希望对你有一定的参考价值。笔者想说:觉得英文与中文分词有很大的区别, ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 掌握这些技巧,轻松获取超过90%的资源信息
    在数字时代,高效获取所需资源是每个人必备的技能。本文将分享一系列实用技巧,帮助读者轻松获取超过90%的网络资源信息,无论是学术资料、技术文档还是最新资讯,都能迅速找到。通过优化搜索引擎使用、利用专业数据库和社群资源等方法,读者将能够在信息海洋中游刃有余。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • 经过半年的精心整理,我们汇总了当前市场上最全面的Android面试题解析,为移动开发人员的晋升和加薪提供了宝贵的参考资料。本书详细涵盖了从基础到高级的各类面试题,帮助读者全面提升技术实力和面试表现。章节目录包括:- 第一章:Android基础面试题- 第二章:... ... [详细]
  • 模糊神经网络的训练策略与学习算法优化
    本文探讨了模糊神经网络的训练策略与学习算法优化,详细分析了基于FPGA和MATLAB的实现方法。通过改进的学习算法,提高了模糊神经网络在复杂环境下的适应性和准确性,为相关领域的研究者提供了有价值的参考和技术支持。 ... [详细]
  • 本文主要参考《Python机器学习经典实例》  在介绍凝聚层次聚类之前,我们需要先理解层次聚类(hierarchicalclustering)。层次聚类是一组聚类算法,通过不断地分 ... [详细]
  • lightgbm过去版本安装包_集成学习算法LightGBM
    LightGBM在Kaggle,KDD等各类数据竞赛中,无论是分类问题还是回归问题亦或是排序问题,以GBDT(分类回归决策树 ... [详细]
author-avatar
多米音乐_34084632
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有